home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1996 #6 / Amiga Plus CD - 1996 - No. 06.iso / pd / daten / abook / arexx / abook.intui < prev    next >
Text File  |  1995-12-30  |  7KB  |  213 lines

  1. /*
  2. **  $VER: ABook.intui V00.04 (28.12.95)
  3. **
  4. **  © 1995 Michael Brakemeier
  5. **
  6. **  $PROGRAMNAME:
  7. **    ABook.intui
  8. **
  9. **  FUNCTION:
  10. **    Lets ABook-Server handle IntuiNews's address book.
  11. **
  12. **  $HISTORY:
  13. **
  14. **   28.12.95 : V00.04 :  Added 'SAVE' command and fixed surname only bug
  15. **   21.12.95 : V00.03 :  fixed a little bug in query routine
  16. **   07.09.95 : V00.02 :  first working version :-)
  17. **   05.09.95 : V00.01 :  initial release
  18. **
  19. **
  20. **   TO DO:
  21. **   - support for ABook-groups,
  22. **     but in which group should we save????
  23. */
  24.  
  25. OPTIONS RESULTS
  26. SIGNAL ON SYNTAX
  27.  
  28. if ~show('P','ABOOK_SERVER') then do
  29.   'REQUEST "ABook" "**_OK" "Sorry, ABook-Server is not running !"'
  30.   exit 10
  31. end
  32.  
  33. oldaddress = address()
  34.  
  35. /* parse command line */
  36. PARSE ARG Command " " Name "," eaddr "," incomment
  37.  
  38. /* build database on query */
  39. if Command = 'QUERY' then
  40.   do
  41.     address 'ABOOK_SERVER'
  42.     'SEARCH #? EMAIL STEM=ABLOCKS.'
  43.     if RC = 0 then
  44.       if ABLOCKS.COUNT ~= 0 then
  45.         do entry = 1 to ABLOCKS.COUNT
  46.           'LOCK '||ABLOCKS.entry
  47.           if RC ~= 0 then
  48.             do
  49.               if RC = 5 then
  50.                 'REQUESTRESPONSE TITLE="ABook Import" BUTTON="**_OK" PROMPT="Sorry, database is in use !"'
  51.               else
  52.                 'REQUESTRESPONSE TITLE="ABook Import" BUTTON="**_OK" PROMPT="Sorry, can''t get data !"'
  53.               exit 10
  54.             end
  55.           else
  56.             do
  57.               'QUERY STEM=ADDR.'
  58.               'UNLOCK '||ABLOCKS.entry
  59.               if ADDR.FIRST ~= "" then
  60.                 fullname = ADDR.FIRST||' '||ADDR.LAST
  61.               else
  62.                  fullname = ADDR.LAST
  63.               address value oldaddress
  64.               do emailno=1 to ADDR.EMAIL.COUNT
  65.                 'ADD "'||fullname||'" "'||ADDR.EMAIL.emailno.ADR||'" "'||ADDR.EMAIL.emailno.DES||'"'
  66.               end
  67.               address 'ABOOK_SERVER'
  68.             end
  69.         end
  70.     signal done
  71.   end /* QUERY */
  72.  
  73. /* add a new address */
  74. if Command = 'ADD' then
  75.   do
  76.     /* parse given args */
  77.     sep=lastpos(' ', Name)
  78.     if sep = 0 then
  79.       do
  80.         prename = ''
  81.         surname = Name
  82.       end
  83.     else
  84.       do
  85.         prename = left(Name, sep-1)
  86.         surname = substr(Name, sep+1)
  87.       end
  88.     if incomment = 'INCOMMENT' then
  89.       incomment = ''
  90.  
  91.     /* search for an existing entry */
  92.     address 'ABOOK_SERVER'
  93.     'SEARCH '||eaddr||' NOCASE EMAIL STEM=ABDATA.'
  94.     if RC = 0 then
  95.       do
  96.         if ABDATA.COUNT > 0 then
  97.           do
  98.             'REQUESTRESPONSE TITLE="ABook Import" BUTTON="**_OK"',
  99.                   ' PROMPT="There is allready an entry with email-address\n\33c\338'||eaddr||'\330\nin the database !"'
  100.  
  101.             signal done
  102.           end
  103.       end
  104.     lock = -1
  105.     'SEARCH '||surname||' NOCASE LAST STEM=ABDATA.'
  106.     if RC=0 then
  107.       do
  108.         if ABDATA.COUNT > 0 then
  109.           do
  110.             if ABDATA.COUNT > 1 then
  111.               do
  112.                 if prename <> '' then
  113.                   do
  114.                     /* hmpf, multiple occurences... */
  115.                     'SEARCH ||'prename'|| NOCASE FIRST STEM=ABMULT.'
  116.                     if RC=0 then
  117.                       do
  118.                         if ABDATA.COUNT > 0 then
  119.                           do
  120.                             if ABDATA.COUNT > 1 then
  121.                               do
  122.                                 'REQUESTRESPONSE TITLE="ABook Import" BUTTON="**_OK"',
  123.                                       'PROMPT="Sorry, too many matching entries\nin database. Couldn''t add !"'
  124.  
  125.                                 signal done
  126.                               end
  127.                             else
  128.                               do
  129.                                 entry = 1
  130.                                 lock = 0
  131.                                 do while ABMULT.1 <> ABDATA.entry
  132.                                   entry = entry + 1
  133.                                   if entry > ABDATA.COUNT then
  134.                                     do
  135.                                       /* hm, no matching entry ? Maybe prename is an abbrev, but who cares :-) */
  136.                                       lock = -1
  137.                                       leave
  138.                                     end
  139.                                 end
  140.                                 if lock <> -1 then
  141.                                   lock = ABDATA.entry
  142.                               end
  143.                           end
  144.                       end  /* found matching entry via pre- & surname */
  145.                   end
  146.                 else
  147.                   do
  148.                     'REQUESTRESPONSE TITLE="ABook Import" BUTTON="**_OK"',
  149.                           'PROMPT="Sorry, too many matching entries\nin database. Couldn''t add !"'
  150.  
  151.                     signal done
  152.                   end
  153.               end
  154.             else
  155.               do
  156.                 /* one matching entry, append email and comment */
  157.                 lock = ABDATA.1
  158.               end
  159.           end /* search for lock */
  160.         if lock == -1 then
  161.           do
  162.             /* add */
  163.             drop ADDR.
  164.             ADDR.LAST = surname
  165.             ADDR.FIRST = prename
  166.             ADDR.EMAIL.COUNT = 1
  167.             ADDR.EMAIL.1.ADR = eaddr
  168.             ADDR.EMAIL.1.DES = incomment
  169.             'REQUESTRESPONSE TITLE="ABook Import" BUTTON="**_Add|_Cancel"',
  170.                   'PROMPT="Add entry\nName : \338'||ADDR.FIRST||' '||ADDR.LAST||'\330\nEmail : \338',
  171.                   ||eaddr||' '||incomment||'\330\nto the database ?"'
  172.  
  173.             if RC = 0 then
  174.               if RESULT = 1 then
  175.                 do
  176.                   'ADD STEM=ADDR.'
  177.                   'SAVE'
  178.                 end
  179.             signal done
  180.           end
  181.         else
  182.           do
  183.             /* append */
  184.             drop ADDR.
  185.             'LOCK '||lock
  186.             'QUERY STEM=ADDR.'
  187.             emailno = ADDR.EMAIL.COUNT + 1
  188.             ADDR.EMAIL.COUNT = emailno
  189.             ADDR.EMAIL.emailno.ADR = eaddr
  190.             ADDR.EMAIL.emailno.DES = incomment
  191.             'REQUESTRESPONSE TITLE="ABook Import" BUTTON="**_Append|_Cancel"',
  192.                   'PROMPT="Append to entry\nName : \338'||ADDR.FIRST||' '||ADDR.LAST||'\330\nEmail : \338',
  193.                   ||eaddr||' '||incomment||'\330\nto the database ?"'
  194.  
  195.             if RC = 0 then
  196.               if RESULT = 1 then
  197.               do
  198.                 'EDIT STEM=ADDR.'
  199.                 'SAVE'
  200.               end
  201.             'UNLOCK '||lock
  202.           end
  203.       end
  204.   end /* ADD */
  205.  
  206. done:
  207. exit
  208.  
  209. SYNTAX:
  210. address value oldaddress
  211. 'REQUEST "ABook.intui" "OK" "Sorry, error line '||SIGL||':'||ERRORTEXT(RC)||' :-("'
  212. exit 20
  213.